﻿using System;
using System.Text;
using System.Web.UI;
using System.Web.Security;
using SGAEntidades;
using SGALogicaNegocio;
using System.Collections.Generic;
using System.Web.UI.WebControls;

namespace webSGA
{
    public partial class wfImplementarLocal : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    lblUsuario.Text = Context.User.Identity.Name;
                    Util.Util.CargarEstadoSolicitud(cboEstadoImplementacion, false);
                    Util.Util.CargarEstadoSolicitud(cboEstadoConsultaI, false);
                    Util.Util.CargarTipoLocal(cboTipoLocalConsulta, true);
                    hfAccion.Value = "N";
                    cboEstadoImplementacion.SelectedValue = "01";
                    Session["DetalleImplementacion"] = null;
                }
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }
        }

        private void LimpiarCampos()
        {
            txtIdImplementacion.Text = "";
            cboEstadoImplementacion.SelectedValue = "01";
            txtIdEmpleado.Text = "";
            txtNombreEmpleado.Text = "";
            txtAreaEmpleado.Text = "";
            txtFechaInicio.Text = "";
            txtFechaFin.Text = "";
            txtObservaciones.Text = "";
            gvCheckList.DataSource = null;
            Session["DetalleImplementacion"] = null;
        }

        private void ActivarDesactivarCampos(Boolean bEstado)
        {
            txtFechaInicio.Enabled = bEstado;
            txtFechaFin.Enabled = bEstado;
            btnBuscarEmpleado.Enabled = bEstado;
            txtObservaciones.Enabled = bEstado;
            btnAgregarCheckList.Enabled = bEstado;
            //gvCheckList.Enabled = false;
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            hfAccion.Value = "N";
            LimpiarCampos();
            ActivarDesactivarCampos(true);
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            try
            {
                MostrarModalConfirmacion();
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            hfAccion.Value = "M";
            ActivarDesactivarCampos(true);
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            if (hfAccion.Value.Equals("N"))
                LimpiarCampos();
            else
                ActivarDesactivarCampos(false);
            hfAccion.Value = "";
        }

        protected void btnBuscarLocal_Click(object sender, EventArgs e)
        {
            cboTipoLocalConsulta.SelectedValue = "-1";
            gvConsultaLocal.DataSource = null;

            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalConsultaLocal').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        protected void btnCerrarSesion_Click(object sender, EventArgs e)
        {
            FormsAuthentication.SignOut();
            Response.Redirect("Login.aspx");
        }

        protected void gvCheckList_RowEditing(object sender, System.Web.UI.WebControls.GridViewEditEventArgs e)
        {
            gvCheckList.EditIndex = e.NewEditIndex;
            Bind();
        }

        protected void gvCheckList_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
        {

        }

        protected void gvCheckList_RowCancelingEdit(object sender, System.Web.UI.WebControls.GridViewCancelEditEventArgs e)
        {
            gvCheckList.EditIndex = -1;
            Bind();
        }

        protected void gvCheckList_RowUpdating(object sender, System.Web.UI.WebControls.GridViewUpdateEventArgs e)
        {
            try
            {
                var fila = gvCheckList.Rows[e.RowIndex];
                var nFila = e.RowIndex + 1;

                var lblItemG = (Label)fila.FindControl("lblItemG");
                var txtDescripcionG = (TextBox)fila.FindControl("txtDescripcionG");
                var txtFechaInicioG = (TextBox)fila.FindControl("txtFechaInicioG");
                var txtFechaFinG = (TextBox)fila.FindControl("txtFechaFinG");
                var chkFinalizadoG = (CheckBox)fila.FindControl("chkFinalizadoG");
                var txtObservacionG = (TextBox)fila.FindControl("txtObservacionG");

                if (!Util.Util.EsFechaValida(txtFechaInicioG.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar una fecha de inicio válida.", alertaError, alertaExito, lblError, lblExito);
                    UpdatePanel2.Update();
                    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
                    return;
                }

                if (!Util.Util.EsFechaValida(txtFechaFinG.Text))
                {
                    Util.Util.AlternarMensaje(false, "Debe ingresar una fecha de fin válida.", alertaError, alertaExito, lblError, lblExito);
                    UpdatePanel2.Update();
                    ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
                    return;
                }

                var oDetalleImplementacion = new List<ImplementacionLocalDetalleInfo>();
                if (Session["DetalleImplementacion"] != null)
                {
                    oDetalleImplementacion = (List<ImplementacionLocalDetalleInfo>)Session["DetalleImplementacion"];
                }

                for (int i = 0; i <= oDetalleImplementacion.Count - 1; i++)
                {
                    if (!oDetalleImplementacion[i].Item.HasValue)
                    {
                        oDetalleImplementacion[i].Item = nFila;
                        oDetalleImplementacion[i].Descripcion = txtDescripcionG.Text;
                        oDetalleImplementacion[i].FechaInicio = DateTime.Parse(txtFechaInicioG.Text);
                        oDetalleImplementacion[i].FechaFin = DateTime.Parse(txtFechaFinG.Text);
                        oDetalleImplementacion[i].Finalizado = chkFinalizadoG.Checked ? "1" : "0";
                        oDetalleImplementacion[i].Observaciones = txtObservacionG.Text;
                    }
                    else
                    {
                        if (!String.IsNullOrEmpty(lblItemG.Text))
                        {
                            if (oDetalleImplementacion[i].Item == Int32.Parse(lblItemG.Text))
                            {
                                oDetalleImplementacion[i].Item = nFila;
                                oDetalleImplementacion[i].Descripcion = txtDescripcionG.Text;
                                oDetalleImplementacion[i].FechaInicio = DateTime.Parse(txtFechaInicioG.Text);
                                oDetalleImplementacion[i].FechaFin = DateTime.Parse(txtFechaFinG.Text);
                                oDetalleImplementacion[i].Finalizado = chkFinalizadoG.Checked ? "1" : "0";
                                oDetalleImplementacion[i].Observaciones = txtObservacionG.Text;
                            }
                        }
                    }


                }
                Session["DetalleImplementacion"] = oDetalleImplementacion;
                gvCheckList.EditIndex = -1;
                Bind();
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error al actualizar la ruta: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
                UpdatePanel2.Update();
                ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "ToTheTop", "ToTopOfPage();", true);
            }
        }

        private void Bind()
        {
            var oDetalleImplementacion = new List<ImplementacionLocalDetalleInfo>();
            if (Session["DetalleImplementacion"] != null)
            {
                oDetalleImplementacion = (List<ImplementacionLocalDetalleInfo>)Session["DetalleImplementacion"];
            }

            Session["DetalleImplementacion"] = oDetalleImplementacion;
            gvCheckList.DataSource = oDetalleImplementacion;
            gvCheckList.DataBind();

        }

        protected void btnBuscarEmpleado_Click(object sender, EventArgs e)
        {
            var oEntEmpleado = new Empleado().Consultar(new EmpleadoInfo("00001"));

            if (!String.IsNullOrEmpty(oEntEmpleado.IdEmpleado))
            {
                txtIdEmpleado.Text = oEntEmpleado.IdEmpleado;
                txtNombreEmpleado.Text = oEntEmpleado.Nombre;
                txtAreaEmpleado.Text = oEntEmpleado.Area.Descripcion;
            }
            else
            {
                Util.Util.AlternarMensaje(false, "No se encontró al empledo indicado.", alertaError, alertaExito, lblError, lblExito);
            }
        }

        protected void btnAgregarCheckList_Click(object sender, EventArgs e)
        {
            try
            {
                var oDetalleImplementacion = new List<ImplementacionLocalDetalleInfo>();
                if (Session["DetalleImplementacion"] != null)
                {
                    oDetalleImplementacion = (List<ImplementacionLocalDetalleInfo>)Session["DetalleImplementacion"];
                }
                var oEntDetalle = new ImplementacionLocalDetalleInfo();

                oDetalleImplementacion.Add(oEntDetalle);
                Session["DetalleImplementacion"] = oDetalleImplementacion;
                Bind();


            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }
        }

        protected void btnQuitaCheckList_Click(object sender, EventArgs e)
        {

        }

        protected void btnSiGrabar_Click(object sender, EventArgs e)
        {
            GrabarImplementacion();
            CargarImplementacion(txtIdImplementacion.Text);
        }

        private void CargarImplementacion(string sIdImplementacion)
        {
            var oEntImplementacion = new ImplementacionLocalInfo(sIdImplementacion, null, null, null, null, null);
            oEntImplementacion = new ImplementacionLocal().Consultar(oEntImplementacion);

            if (oEntImplementacion.IdImplementacion != null)
            {
                txtIdImplementacion.Text = oEntImplementacion.IdImplementacion;
                txtIdLocal.Text = oEntImplementacion.IdLocal;
                txtDescripcion.Text = oEntImplementacion.Local.Descripcion;
                cboEstadoImplementacion.SelectedValue = oEntImplementacion.IdEstado;
                txtFechaInicio.Text = oEntImplementacion.FechaInicio.Value.ToShortDateString();
                txtFechaFin.Text = oEntImplementacion.FechaFin.Value.ToShortDateString();
                txtIdEmpleado.Text = oEntImplementacion.IdEmpleadoEncargado;
                txtNombreEmpleado.Text = oEntImplementacion.EmpleadoEncargado.Nombre;
                txtAreaEmpleado.Text = oEntImplementacion.EmpleadoEncargado.Area.Descripcion;
                txtObservaciones.Text = oEntImplementacion.Observaciones;

                oEntImplementacion.Detalle = new ImplementacionLocalDetalle().Listar(new ImplementacionLocalDetalleInfo(oEntImplementacion.IdImplementacion));
                Session["DetalleImplementacion"] = oEntImplementacion.Detalle;
                Bind();
            }
            else
                Util.Util.AlternarMensaje(false, "No se encontró la implementación indicada.", alertaError, alertaExito,
                                          lblError, lblExito);
        }

        private void GrabarImplementacion()
        {
            var sIdImplementacion = "";
            if (ValidarInformacion())
            {
                var oEntImplementacion = new ImplementacionLocalInfo();
                var oDetalleImplementacion = new List<ImplementacionLocalDetalleInfo>();

                oEntImplementacion.IdLocal = txtIdLocal.Text;
                oEntImplementacion.IdEmpleadoEncargado = txtIdEmpleado.Text;
                oEntImplementacion.FechaInicio = DateTime.Parse(txtFechaInicio.Text);
                oEntImplementacion.FechaFin = DateTime.Parse(txtFechaFin.Text);
                oEntImplementacion.IdEstado = cboEstadoImplementacion.SelectedValue;
                oEntImplementacion.Observaciones = txtObservaciones.Text;
                oEntImplementacion.UsuarioSistema = Context.User.Identity.Name;

                if (Session["DetalleImplementacion"] != null)
                {
                    oDetalleImplementacion = (List<ImplementacionLocalDetalleInfo>)Session["DetalleImplementacion"];
                }
                oEntImplementacion.Detalle = oDetalleImplementacion;
                if (hfAccion.Value.Equals("N"))
                {
                    if (new ImplementacionLocal().Registrar(oEntImplementacion, ref sIdImplementacion))
                    {
                        Util.Util.AlternarMensaje(true, "Se registró la implementación de local.", alertaError, alertaExito,
                                                  lblError, lblExito);
                        txtIdImplementacion.Text = sIdImplementacion;
                        ActivarDesactivarCampos(false);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se registró la implementación de local.", alertaError, alertaExito,
                              lblError, lblExito);
                    }
                }
                if (hfAccion.Value.Equals("M"))
                {
                    oEntImplementacion.IdImplementacion = txtIdImplementacion.Text;
                    if (new ImplementacionLocal().Actualizar(oEntImplementacion))
                    {
                        Util.Util.AlternarMensaje(true, "Se actualizó la implementación de local con éxito.", alertaError, alertaExito,
                                                  lblError, lblExito);
                        ActivarDesactivarCampos(false);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se actualizó la implementación de local.", alertaError, alertaExito,
                              lblError, lblExito);
                    }
                }
            }
        }

        private bool ValidarInformacion()
        {
            return true;
        }

        private void MostrarModalConfirmacion()
        {
            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalConfirmacion').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        protected void btnConsultarLocal_Click(object sender, EventArgs e)
        {
            String sIdLocalConsulta = String.IsNullOrEmpty(txtIdLocalConsulta.Text.Trim())
                              ? null
                              : txtIdLocalConsulta.Text.Trim();
            String sDescripcionConsulta = String.IsNullOrEmpty(txtDescripcionConsulta.Text.Trim())
                                          ? null
                                          : txtDescripcionConsulta.Text.Trim();
            String sTipoLocalConsulta = cboTipoLocalConsulta.Items.Count < 1 ||
                                        String.IsNullOrEmpty(cboTipoLocalConsulta.SelectedValue) ||
                                        cboTipoLocalConsulta.SelectedValue.Equals("-1")
                                            ? null
                                            : cboTipoLocalConsulta.SelectedValue;

            gvConsultaLocal.DataSource = new Local().Listar(new LocalInfo(sIdLocalConsulta, sDescripcionConsulta, sTipoLocalConsulta));
            gvConsultaLocal.DataBind();
        }

        protected void gvConsultaLocal_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                var dataKey = gvConsultaLocal.DataKeys[index];
                String sIdLocal = "";
                if (dataKey != null)
                {
                    sIdLocal = dataKey.Value.ToString();
                }
                if (e.CommandName.Equals("Seleccionar"))
                {
                    var oEntLocal = new LocalInfo(sIdLocal, null, null);
                    oEntLocal = new Local().Consultar(oEntLocal);

                    txtIdLocal.Text = oEntLocal.IdLocal;
                    txtDescripcion.Text = oEntLocal.Descripcion;

                    var sb = new StringBuilder();
                    sb.Append(@"<script type='text/javascript'>");
                    sb.Append("$('#modalConsultaLocal').modal('hide');");
                    sb.Append(@"</script>");
                    ClientScript.RegisterStartupScript(GetType(), "Hide", sb.ToString());
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
                }


            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
            }
        }

        protected void btnBuscarImplementacion_Click(object sender, EventArgs e)
        {
            gvConsultaI.DataSource = null;
            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalConsultaImplementacion').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        protected void btnConsultarHI_Click(object sender, EventArgs e)
        {
            String sIdLocal = String.IsNullOrEmpty(txtIdLocalConsultaI.Text.Trim()) ? null : txtIdLocalConsultaI.Text.Trim();
            String sEmpleado = String.IsNullOrEmpty(txtEmpleadoConsultaI.Text.Trim())
                                   ? null
                                   : txtEmpleadoConsultaI.Text.Trim();
            String sEstado = cboEstadoConsultaI.SelectedValue.Equals("-1") ? null : cboEstadoConsultaI.SelectedValue;
            DateTime? dFechaInicioDesde;
            DateTime? dFechaInicioHasta;
            DateTime? dFechaFinDesde;
            DateTime? dFechaFinHasta;

            if (String.IsNullOrEmpty(txtFechaInicioDesde.Text.Trim()))
                dFechaInicioDesde = null;
            else
                dFechaInicioDesde = DateTime.Parse(txtFechaInicioDesde.Text.Trim());

            if (String.IsNullOrEmpty(txtFechaInicioHasta.Text.Trim()))
                dFechaInicioHasta = null;
            else
                dFechaInicioHasta = DateTime.Parse(txtFechaInicioHasta.Text.Trim());

            if (String.IsNullOrEmpty(txtFechaFinDesde.Text.Trim()))
                dFechaFinDesde = null;
            else
                dFechaFinDesde = DateTime.Parse(txtFechaFinDesde.Text.Trim());

            if (String.IsNullOrEmpty(txtFechaFinHasta.Text.Trim()))
                dFechaFinHasta = null;
            else
                dFechaFinHasta = DateTime.Parse(txtFechaFinHasta.Text.Trim());

            gvConsultaI.DataSource =
                new ImplementacionLocal().Listar(new ImplementacionLocalInfo(null, sIdLocal, dFechaInicioDesde, dFechaInicioHasta, dFechaFinDesde, dFechaFinHasta));
            gvConsultaI.DataBind();
        }

        protected void gvConsultaI_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                var dataKey = gvConsultaI.DataKeys[index];
                String sIdImplementacion = "";
                if (dataKey != null)
                {
                    sIdImplementacion = dataKey.Value.ToString();
                }

                if (e.CommandName.Equals("Seleccionar"))
                {
                    CargarImplementacion(sIdImplementacion);
                    ActivarDesactivarCampos(false);

                    var sb = new StringBuilder();
                    sb.Append(@"<script type='text/javascript'>");
                    sb.Append("$('#modalConsultaImplementacion').modal('hide');");
                    sb.Append(@"</script>");
                    ClientScript.RegisterStartupScript(GetType(), "Hide", sb.ToString());
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
                }
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
            }
        }
    }
}